#include "WeekdayDisplay.h"
#include <QDate>
#include <QPainter>
#include <QTimer>
#include <QPalette>
#include <QPainterPath>
#include <QLabel>
#include <QSvgRenderer>

WeekdayDisplay::WeekdayDisplay(QWidget *parent)
    : QWidget{parent}
{
    m_nHeartSize = 25;
    // 每天更新一次，确保红色小圆圈随日期更新
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    heart = new QLabel(this);
    heart->resize(m_nHeartSize,m_nHeartSize);
    // 使用 QSvgRenderer 加载 SVG 文件
    QSvgRenderer svgRenderer(QString(":/resource/svg/love.svg"));  // 使用资源路径

    // 创建一个 QPixmap，并指定图像大小
    QPixmap pixmap(m_nHeartSize, m_nHeartSize);  // 200x200 是目标大小，可以调整
    pixmap.fill(Qt::transparent);  // 设置透明背景

    // 使用 QPainter 在 QPixmap 上绘制 SVG 图像
    QPainter painter(&pixmap);
    svgRenderer.render(&painter);
    painter.end();

    // 将 QPixmap 设置为 QLabel 的内容
    heart->setPixmap(pixmap);
    timer->start(86400000);  // 每天更新一次
    _font.setFamily("Noto Sans");
    _font.setPointSize(15);
}

void WeekdayDisplay::setClockColor(const QColor &color)
{
    QPalette palette = this->palette();
    palette.setColor(QPalette::WindowText, color);  // 设置字体颜色
    setPalette(palette);
    update();
}

void WeekdayDisplay::setFont(const QFont &font)
{
    _font = font;
}

void WeekdayDisplay::setHeartSize(const QSize &size)
{
    m_nHeartSize = size.height();
    heart->resize(size);
    // 使用 QSvgRenderer 加载 SVG 文件
    QSvgRenderer svgRenderer(QString(":/resource/svg/love.svg"));  // 使用资源路径

    // 创建一个 QPixmap，并指定图像大小
    QPixmap pixmap(size);  // 200x200 是目标大小，可以调整
    pixmap.fill(Qt::transparent);  // 设置透明背景

    // 使用 QPainter 在 QPixmap 上绘制 SVG 图像
    QPainter painter(&pixmap);
    svgRenderer.render(&painter);
    painter.end();

    // 将 QPixmap 设置为 QLabel 的内容
    heart->setPixmap(pixmap);
}

void WeekdayDisplay::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    // 星期文字列表
    QStringList weekdays = { "一", "二", "三", "四", "五", "六", "日" };

    // 获取今天是星期几（1=星期一，7=星期日）
    int today = QDate::currentDate().dayOfWeek();

    // 设置字体和位置
    painter.setFont(_font);

    int spacing = width() / 7;  // 每个文字的间隔
    // 获取当前画笔设置，用于恢复
    QPen originalPen = painter.pen();
    // 绘制星期文字和红色小圆圈
    for (int i = 0; i < 7; ++i) {
        int x = i * spacing + spacing / 2;
        int y = height() / 2;

        // 绘制文字
        painter.drawText(x - 10, y, weekdays[i]);

        // 如果是今天，则在文字下绘制红色小圆圈
        if (i + 1 == today) {
            // 创建小爱心控件
            heart->move(x - m_nHeartSize/3 , y + m_nHeartSize); // 设置爱心的显示位置
            heart->show();
        }

    }
    painter.setPen(originalPen);  // 恢复原始画笔
}
